import {router,addRoutes} from '~/router' //index.js 可以省略不写
import { getToken } from '~/composables/auth'
import { toast, showFullLoading, hideFullLoading } from '~/composables/util'
import store from './store'
// 全局前置守卫，黙认2个参数，还有一个可选参数next

let hasGetInfo=false
router.beforeEach(async(to, from, next) => {

    // console.log("全局前置守卫");

    // console.log(to, from);
    // 显示全屏loading
    showFullLoading()
        // 没有登录，强制跳转回登录页
    const token = getToken()
    if (!token && to.path !== '/login') {
        toast("请先登录", "error")
        return next({ path: '/login' })
    }
    // 防止重复登录
    if (token && to.path == '/login') {
        toast("请勿重复登录", "error")
        return next({ path: from.path ? from.path : '/' })
    }

    // 如果用户登录了，自动获取用户信息，并存储在vuex当中
    let hasNewRoutes=false
    if (token && !hasGetInfo) {
      let {menus}=  await store.dispatch("getInfo")

      hasGetInfo=true
    //   console.log(menus);
        // 动态添加可访问路由表
       hasNewRoutes= addRoutes(menus)
    }

    // 设置页面标题
    // document.title = `${to.meta.title} - 后台管理系统`
    // 或这样写
    let title = to.meta.title ? `${to.meta.title} - 后台管理系统` : '后台管理系统'
    document.title = title
        // 放行
    hasNewRoutes ? next(to.fullPath):next() // 加了可选参数就必须调用next()，否则 路由无法继续跳转
})


// 全局后置钩子
router.afterEach((to, from) => hideFullLoading())